package cn.luncene;

import org.apache.commons.io.FileUtils;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.LongPoint;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.RAMDirectory;
import org.junit.Test;
import org.wltea.analyzer.lucene.IKAnalyzer;

import java.io.File;

/**
 * @author Administrator
 * @Title: 萧萧
 * @ProjectName lucene
 * @Description: 创建索引
 * @date 2018/9/26 18:43
 */
/*
    第一步：创建一个java工程，并导入jar包。
    第二步：创建一个indexwriter对象。
    1）指定索引库的存放位置Directory对象
    2）指定一个IndexWriterConfig对象。
    第二步：创建document对象。
    第三步：创建field对象，将field添加到document对象中。
    第四步：使用indexwriter对象将document对象写入索引库，此过程进行索引创建。并将索引和document对象写入索引库。
    第五步：关闭IndexWriter对象
 */
public class createIndex {
    @Test
    public void test() throws Exception{
        //指定索引库存储位置
        //FSDirectory将索引库存放在磁盘中
        Directory directory = FSDirectory.open(new File("I:\\视频\\lucene学生\\02.参考资料\\index").toPath());
        //也可以将索引库存放在内存中
        //Directory directory = new RAMDirectory();
        //创建IndexWriterConfig对象
        IndexWriterConfig config = new IndexWriterConfig(new IKAnalyzer());
        //创建IndexWriter对象
        IndexWriter indexWriter = new IndexWriter(directory,config);

        //原始文档的路径目录I:\视频\lucene学生\02.参考资料\searchsource
        File dir = new File("I:\\视频\\lucene学生\\02.参考资料\\searchsource");
        File[] files = dir.listFiles();
        for(File file:files){
            //文件名
            String fileName = file.getName();
            //大小
            long size = FileUtils.sizeOf(file);
            //文件路径
            String filePath = file.getPath();
            //文件内容
            String content = FileUtils.readFileToString(file,"utf-8");

            //创建文件名域
            //第一个参数：域的名称
            //第二个参数：域的内容
            //第三个参数：是否存储
            Field fileNameField = new TextField("name",fileName, Field.Store.YES);
            //文件大小域
            Field fileSizeField = new LongPoint("size",size);
            //文件路径域
            Field filePathField = new TextField("path",filePath, Field.Store.YES);
            //文件内容域
            Field fileContentField = new TextField("content",content, Field.Store.YES);

            //创建document对象
            Document document = new Document();
            document.add(fileNameField);
            document.add(fileSizeField);
            document.add(filePathField);
            document.add(fileContentField);

            //创建索引，并写入索引库
            indexWriter.addDocument(document);
        }
        //关闭indexWriter
        indexWriter.close();
    }
}
